package org.example.campusforum.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 评论实体类
 *
 * 对应数据库中的comment表，用于存储校园论坛中的评论信息。
 * 支持层级评论结构，包括顶级评论和回复评论。
 * 包含评论内容、关联关系、状态管理等字段。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Comment implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 评论主键ID
     * 数据库自增长字段，唯一标识一条评论
     */
    private Long id;

    /**
     * 所属文章ID
     * 外键关联article表的id字段，标识评论所属的文章
     */
    private Long articleId;

    /**
     * 评论内容
     * 用户发表的评论文本内容
     */
    private String content;

    /**
     * 父评论ID
     * 0: 表示顶级评论（直接对文章的评论）
     * 非0: 表示回复评论（对其他评论的回复）
     */
    private Long parentId;

    /**
     * 发表评论的用户ID
     * 外键关联user表的id字段，标识评论的发表者
     */
    private Long postUserId;

    /**
     * 被回复的用户ID
     * 0: 表示顶级评论，无被回复用户
     * 非0: 表示回复评论，指向被回复的用户
     */
    private Long replyUserId;

    /**
     * 评论发表时间
     * 记录评论创建的时间，数据库默认为当前时间
     */
    private LocalDateTime createTime;

    /**
     * 评论更新时间
     * 记录评论最后一次修改的时间，数据库自动更新
     */
    private LocalDateTime updateTime;

    /**
     * 评论状态
     * 0: 正常状态 - 评论正常显示
     * 1: 举报中 - 评论被举报，待处理
     * 2: 违规状态 - 评论违规，已被隐藏
     */
    private Integer status;

    /**
     * 逻辑删除标识
     * 0: 正常状态 - 评论正常存在
     * 1: 已删除 - 评论已被逻辑删除，不再显示
     */
    private Integer isDeleted;

    /**
     * 评论点赞数量
     * 统计该评论获得的点赞总数，默认为0
     */
    private Integer likeCount;
}
